package com.shm.leetcode;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 989. 数组形式的整数加法
 * 对于非负整数 X 而言，X 的数组形式是每位数字按从左到右的顺序形成的数组。例如，如果 X = 1231，那么其数组形式为 [1,2,3,1]。
 *
 * 给定非负整数 X 的数组形式 A，返回整数 X+K 的数组形式。
 *
 *
 *
 * 示例 1：
 *
 * 输入：A = [1,2,0,0], K = 34
 * 输出：[1,2,3,4]
 * 解释：1200 + 34 = 1234
 * 示例 2：
 *
 * 输入：A = [2,7,4], K = 181
 * 输出：[4,5,5]
 * 解释：274 + 181 = 455
 * 示例 3：
 *
 * 输入：A = [2,1,5], K = 806
 * 输出：[1,0,2,1]
 * 解释：215 + 806 = 1021
 * 示例 4：
 *
 * 输入：A = [9,9,9,9,9,9,9,9,9,9], K = 1
 * 输出：[1,0,0,0,0,0,0,0,0,0,0]
 * 解释：9999999999 + 1 = 10000000000
 *
 *
 * 提示：
 *
 * 1 <= A.length <= 10000
 * 0 <= A[i] <= 9
 * 0 <= K <= 10000
 * 如果 A.length > 1，那么 A[0] != 0
 * @author SHM
 */
public class AddToArrayForm {
    /**
     * 方法一：逐位相加
     * 思路
     *
     * 让我们逐位将数字加在一起。例如计算 123+912123+912，我们从低位到高位依次计算 3+23+2、2+12+1 和 1+91+9。任何时候，若加法的结果大于等于 1010，把进位的 11 加入到下一位的计算中，所以最终结果为 10351035。
     *
     * 作者：LeetCode-Solution
     * 链接：https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/shu-zu-xing-shi-de-zheng-shu-jia-fa-by-l-jljp/
     * @param A
     * @param K
     * @return
     */
    public List<Integer> addToArrayForm(int[] A, int K) {
        List<Integer> ans = new ArrayList<>();
        for(int i=A.length-1;i>=0;i--){
            int sum = A[i]+K%10;
            K/=10;
            if(sum>=10){
                K++;
                sum-=10;
            }
            ans.add(0,sum);
        }
        for(;K>0;K/=10){
            ans.add(0,K%10);
        }
        return ans;
    }

    public List<Integer> addToArrayForm_2(int[] A, int K) {
        List<Integer> ans = new ArrayList<>();
        for (int i = A.length-1; i >= 0||K>0; i--) {
            if(i>=0){
                K+=A[i];
            }

            ans.add(K%10);
            K/=10;
        }
        Collections.reverse(ans);
        return ans;
    }
}
